package edu.scau.mis.pos.mapper;

import edu.scau.mis.pos.domain.Product;
import org.apache.ibatis.annotations.*;

import java.util.List;
@Mapper
public interface ProductMapper {
    @Select("SELECT MAX(product_sn) FROM clo_product WHERE product_sn LIKE 'P%'")
    String getMaxProductSn();
    /**
     * 查询所有商品
     * @return
     */
    List<Product> listAllProduct();

    /**
     * 分页查询
     * @param product
     * @return
     */
    List<Product> selectProductByPage(Product product);

    /**
     * 价格区间查询商品
     * @param minPrice 最低价格
     * @param maxPrice 最高价格
     * @return
     */

    List<Product> selectProductByPrice(int minPrice,int maxPrice);

    Product selectProductBySn(String productSn);

    List<Product> selectProductByName(String productName);

    int insertProduct(Product product);

    // 单个删除商品
    int deleteProductBySn(@Param("productSn") String productSn);

    // 批量删除商品
    int deleteProductBySnBatch(@Param("productSnList") List<String> productSnList);

    int updateProduct(Product product);

    public Product getProductBySn(@Param("productSn") String productSn);

    String getCategoryNameById(String categoryId);

    // 增加库存的方法（如果需要保留原来的方法）
    void increaseStock(@Param("productSn") String productSn, @Param("quantity") int quantity);

    // 减少销量的方法（如果需要保留原来的方法）
    void decreaseSalesVolume(@Param("productSn") String productSn, @Param("quantity") int quantity);

    // 库存更新：sku_code操作clo_skus表
    @Update("UPDATE clo_skus SET stock_quantity = stock_quantity + #{quantity} WHERE sku_code = #{skuCode}")
    int increaseStockQuantity(@Param("skuCode") String skuCode, @Param("quantity") Integer quantity);

    // 减少 clo_product 表的销量，同时增加库存
    @Update("UPDATE clo_product SET sales_quantity = sales_quantity - #{quantity}, stock_quantity = stock_quantity + #{quantity} WHERE product_sn = #{productSn}")
    int decreaseSalesAndIncreaseStock(@Param("productSn") String productSn, @Param("quantity") Integer quantity);

    // 1️⃣ SKU 库存减少
    @Update("UPDATE clo_skus SET stock_quantity = stock_quantity - #{quantity} WHERE sku_code = #{skuCode}")
    int decreaseStockQuantity(@Param("skuCode") String skuCode, @Param("quantity") Integer quantity);

    // 2️⃣ 商品销量增加 & 库存减少
    @Update("UPDATE clo_product SET sales_quantity = sales_quantity + #{quantity}, stock_quantity = stock_quantity - #{quantity} WHERE product_sn = #{productSn}")
    int increaseSalesAndDecreaseStock(@Param("productSn") String productSn, @Param("quantity") Integer quantity);


}
